//
// Created by YueChuan on 2023/3/19.
//

#ifndef NETWORKDISK_CONNECTSOCKET_H
#define NETWORKDISK_CONNECTSOCKET_H

#include "QTcpSocket"
#include "QHostAddress"
#include "QObject"

class connectSocket : QObject {
Q_OBJECT


public:
    /*
     * 创建并与服务端进行连接
     * 传入的两个int型变量是发送消息的双方的uid，方便在后续的写操作
     */
//    static connectSocket *GetInstance(int sendUid, int acceptUid) {
//        static connectSocket socket(sendUid, acceptUid);
//        return &socket;
//    }
    connectSocket(int, int);

    connectSocket() = default;

    ~connectSocket() = default;

    void disconnectSocket();
    /*
     * 根据传递的消息写数据到服务端
     * type: 指的是传输消息的内容，可能是文件，可能是文本消息
     * msg: 指的就是要传递的消息的正文内容
     */
    bool writeToServer(const QString& type, QString msg);

public slots:

    /*
     * 自定义槽函数，当连接成功时打印消息
     */
    static void connectSucceed();

    /*
     * 自定义槽函数，当断开连接时打印消息
     */
    static void disconnectSucceed();

    /*
     * 自定义槽函数，当连接出现错误时打印错误消息
     */
    static void error_slot(QAbstractSocket::SocketError socketError);

private:
    QTcpSocket *socket{};
    int sendUid;
    int accUid;
    QString host;
    QString port;
};


#endif //NETWORKDISK_CONNECTSOCKET_H
